package com.javaee.ejb.session;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.javaee.ejb.entity.Employee;

/**
 * Session Bean implementation class EmployeeManager
 */
@Stateless
public class EmployeeManager implements EmployeeManagerRemote {


	//////////////////
	//Membres priv�s//
	//////////////////
	@PersistenceContext		//Persistence g�r�e par le conteneur (injection � l'ex�cution)
	EntityManager m_GestionnaireEntites;		//g�re la persistence des donn�es
	
	//////////////////////
	//M�thodes publiques//
	//////////////////////
	//Constructeur par d�faut
    /**
     * Default constructor. 
     */
    public EmployeeManager() {
        // TODO Auto-generated constructor stub
    	
    }

    //Permet d'ajouter un employ�
    public void AjouterEmploye(Employee p_Employe)
    {
    	//Ajout de l'employ� � la base de donn�es
    	m_GestionnaireEntites.persist(p_Employe);
    }
    
  //Permet de modifier un employ�
    public void UpdateEmploye(Employee p_Employe)
    {
    	//Modification de l'employ� dans la base de donn�es
    	m_GestionnaireEntites.merge(p_Employe);
    }    
    
    //Permet de supprimer un employ�
    public void DeleteEmploye(int id_Employe)
    {
    	//Suppression de l'employ� dans la base de donn�es
    	Employee e = GetEmployeParId(id_Employe);
    	m_GestionnaireEntites.remove(e);
    }
    
    //R�cup�re la liste de tous les employ�s
    @SuppressWarnings("unchecked")	//permet d'�viter la v�rification du transtypage explicite
	public List<Employee> GetEmployes()
    {
    	return (List<Employee>)m_GestionnaireEntites.createNamedQuery("FindAllEmployees").getResultList();    	
    }
    
    //R�cup�re l'employ� correspondant au nom d'utilisateur pass� en param�tre
    public Employee GetEmployeParNomUtilisateur(String p_NomUtilisateur)
    {
    	System.out.println("Nom Utilisateur: "+p_NomUtilisateur);
    	return (Employee)m_GestionnaireEntites.createNamedQuery("FindEmployeeByUsername").setParameter("p_Username", p_NomUtilisateur).getSingleResult();
    }
    
    public Employee GetEmployeParId(int p_usrid)
    {
    	System.out.println("Id utilisateur: "+p_usrid);
    	return (Employee)m_GestionnaireEntites.createNamedQuery("FindEmployeeById").setParameter("p_UserId", p_usrid).getSingleResult();
    }
    
    public Employee getEmployeeFromUsernamePassword(String username,String password){
    	Employee e = null;
    	Query q = m_GestionnaireEntites.createNamedQuery("FindEmployeeFromUsernamePassword");
    	q.setParameter("p_username", username);
    	q.setParameter("p_password",password);
    	
    	try{
    	e = (Employee) q.getSingleResult();
    	}catch(Exception exception){
    		return null;
    	}
    	return e;
    }

	@Override
	public String getHello(String name) {
		return "Hello "+name;
	}
    

}
